import axios from 'axios'
  import { message } from 'ant-design-vue'
import router from '@/router'
import { useUserStore } from '@/stores/userStore'

const baseURL = '/api' //基地址，之后发出的请求都会携带的

const request = axios.create({
  // TODO 1. 基础地址，超时时间
  baseURL,
  timeout: 50000
})

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    const userStore = useUserStore()
    if (userStore.token) {
      config.headers.Authorization = `Bearer ${userStore.token}`
    }
    // 如果是FormData类型的数据，不设置Content-Type，让浏览器自动处理
    // if (config.data instanceof FormData) {
    //   delete config.headers['Content-Type']
    // }
    return config
  },
  (err) => Promise.reject(err)
)

// 响应拦截器
request.interceptors.response.use(
  (res) => {
    if (res.data.code === 200) {
      return res.data
    }
    const errorMsg = res.data.info || '服务异常'
    message.error(errorMsg)
    return Promise.reject(new Error(errorMsg))
  },
  (err) => {
    // 处理HTTP状态码和错误信息
    const { status, data } = err.response || {}
    let errorMsg = '服务异常'
    
    switch (status) {
      case 401:
        const userStore = useUserStore()
        userStore.clearUserData()
        router.push('/login')
        errorMsg = data?.message || '登录已过期，请重新登录'
        break
      case 403:
        errorMsg = data?.message || '没有操作权限'
        break
      case 404:
        errorMsg = data?.message || '请求的资源不存在'
        break
      case 500:
        errorMsg = data?.message || '服务器内部错误'
        break
      default:
        errorMsg = data?.message || '网络请求失败'
    }
    message.error(errorMsg)
    return Promise.reject(err)
  }
)

export default request
export { baseURL }
